﻿//即使v8 的接口性能也是很尴尬的

//using Avalonia;
//using Microsoft.ClearScript;
//using Microsoft.ClearScript.V8;
//using Microsoft.VisualBasic;
//using SixLabors.Fonts;
//using System;
//using System.Collections.Generic;
//using System.Collections.ObjectModel;
//using System.Diagnostics;
//using System.Linq;
//using System.Reflection.Metadata;
//using System.Text;
//using System.Threading.Tasks;
//using TTEngine.Graphics;
//using TTEngine.TTMath;

//namespace voidbox.Code
//{
//    public static class JsEngine
//    {
//        public class JsFont
//        {
//            //Handle()
//            [Microsoft.ClearScript.NoScriptAccess]
//            public ISystemTtfFontFamily family;
//            public JsSpriteInfo GetSprite(int charcode, int fontsize)
//            {
//                var spdata = this.family.GetFont(fontsize).GetCharImage((char)charcode, 1);
//                var packelem = Root.AppStack.Peek().gfx_resource.PackedTextureGroup.AddSpriteInfo(spdata, SpriteEffect.GrayAsAlpha, TTEngine.TTMath.Border.Zero);
//                return new JsSpriteInfo(packelem);
//            }
//        }
//        public class JsSpriteInfo
//        {
//            [Microsoft.ClearScript.NoScriptAccess]

//            public JsSpriteInfo(PackedTextureElement elem)
//            {
//                this.index = elem.index;
//                this.width = elem.PixelWidth;
//                this.height = elem.PixelHeight;
//            }

//            public readonly int index;

//            public readonly int width;

//            public readonly int height;
//        }
//        public static class JsAPI
//        {

//            ////////////////////////////////////////////////////////////////////////////////////////////////////////
//            //Debug接口
//            public static void debug_Log(string type, string txt)
//            {
//                Debug.WriteLine("[" + type + "]" + txt);
//            }
//            ////////////////////////////////////////////////////////////////////////////////////////////////////////
//            /// <summary>
//            /// System 接口
//            /// </summary>
//            /// <returns></returns>
//            public static string sys_GetVersionString()
//            {
//                return Root.Version;
//            }
//            public static void sys_RunApp(string apppath)
//            {
//                Root.RunApp(apppath);
//            }
//            public static void sys_ExitApp()
//            {
//                var stack = Root.AppStack.Pop();
//                stack.Dispose();
//                if (Root.AppStack.Count > 0)
//                {
//                    Root.AppStack.Peek().Resume();
//                }
//                else
//                {
//                    //退出
//                    Environment.Exit(0);
//                }
//            }
//            public static byte[] sys_LoadBinaryInApp(string apppath, string filepath)
//            {
//                using var tapp = new VBApp(apppath);
//                return tapp.LoadBinary(filepath);
//            }
//            public static string sys_LoadTextInApp(string apppath, string filepath)
//            {
//                using var tapp = new VBApp(apppath);
//                return tapp.LoadText(filepath);

//            }
//            ////////////////////////////////////////////////////////////////////////////////////////////////////////
//            //App接口

//            public static string app_GetRootPath()
//            {
//                return Root.AppStack.Peek().Path;
//            }
//            public static byte[] app_LoadBinary(string filepath)
//            {
//                return Root.AppStack.Peek().LoadBinary(filepath);
//            }
//            public static string app_LoadText(string filepath)
//            {
//                return Root.AppStack.Peek().LoadText(filepath);
//            }
//            public static int app_GetPixelWidth()
//            {
//                return Root.AppStack.Peek().Config.PixelWidth;
//            }
//            public static int app_GetPixelHeight()
//            {
//                return Root.AppStack.Peek().Config.PixelHeight;
//            }

//            public static void app_SetGameUpdate(ScriptObject obj)
//            {
//                Root.AppStack.Peek().callupdate = obj;
//            }
//            public static void app_SetGameRender(ScriptObject obj)
//            {
//                Root.AppStack.Peek().callrender = obj;
//            }
//            ///////////////////////////////////////////////////////////////////////////
//            //GFX
//            //v8 接口不能传uint类型
//            public static void gfx_Clear(int v)
//            {
//                var colorNum = (uint)v;
//                TTEngine.API.view.Clear(TTEngine.TTMath.Color32.FromColorNum(colorNum));
//            }
//            public static void gfx_DrawSprite(JsSpriteInfo sprite, float  x, float y, int colorNUM, float sx,float sy,float rotate)
//            {
//                var elem = new PackedTextureElementInst();
//                elem.ElemID =(ushort) sprite.index;
//                elem.color = Color32.FromColorNum((uint)colorNUM);
//                elem.pos.X = x; elem.pos.Y = y;elem.pos.Z = 0;
//                elem.scale.X= sx; elem.scale.Y= sy; 
//                elem.rotate= rotate;
//                var batcher = Root.AppStack.Peek().gfx_batcher.GetPackedTextureInstanceBatcher();
//                batcher.AddElementInst(elem);
//            }
//            public static  void gfx_DrawEnd()
//            {
//                Root.AppStack.Peek().gfx_batcher.EndDraw();
//            }
//            public static JsFont gfx_LoadFont(byte[] data)
//            {

//                var font = TTEngine.API.loader.LoadTTF(data);
//                return new JsFont()
//                {
//                    family = font
//                };
//            }
//            public static JsSpriteInfo gfx_GetLogoSprite()
//            {
//                return new JsSpriteInfo(Root.AppStack.Peek().gfx_resource.BlockLogo);
//            }

//        }

//        static ScriptEngine engine;
//        public static void Init()
//        {
//            engine = new V8ScriptEngine();
//            engine.AddHostType("vb", typeof(JsAPI));
           
//        }
//        public static void Execute(string filename, string code)
//        {
//            engine.Execute(filename, code);

//        }
//    }
//}
